[STBDA2023] 02wk-006: 타이타닉, Autogluon(Fsize)

Author

김보람

Published

September 17, 2023

해당 자료는 전북대학교 최규빈 교수님 2023학년도 2학기 빅데이터분석특강 자료임

02wk-006: 타이타닉, Autogluon (Fsize)

최규빈
2023-09-12

1. 강의영상

https://youtu.be/playlist?list=PLQqh36zP38-zEjYbXMD4e-nS0_-nx9Zac&si=eA9ME6Pe4ecmtIgi

2. Import

# This Python 3 environment comes with many helpful analytics libraries installed
# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python
# For example, here's several helpful packages to load

import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)

# Input data files are available in the read-only "../input/" directory
# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory

import os
for dirname, _, filenames in os.walk('/kaggle/input'):
    for filename in filenames:
        print(os.path.join(dirname, filename))

# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using "Save & Run All" 
# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session
/kaggle/input/titanic/train.csv
/kaggle/input/titanic/test.csv
/kaggle/input/titanic/gender_submission.csv
#pip install autogluon
from autogluon.tabular import TabularDataset, TabularPredictor

3. 분석의 절차

A. 데이터

- 비유: 문제를 받아오는 과정으로 비유할 수 있다.

tr = TabularDataset("~/Desktop/titanic/train.csv")
tst = TabularDataset("~/Desktop/titanic/test.csv")

- 피처엔지니어링

tr.eval('Fsize = SibSp + Parch')
tst.eval('Fsize = SibSp + Parch')
PassengerId Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked Fsize
0 892 3 Kelly, Mr. James male 34.5 0 0 330911 7.8292 NaN Q 0
1 893 3 Wilkes, Mrs. James (Ellen Needs) female 47.0 1 0 363272 7.0000 NaN S 1
2 894 2 Myles, Mr. Thomas Francis male 62.0 0 0 240276 9.6875 NaN Q 0
3 895 3 Wirz, Mr. Albert male 27.0 0 0 315154 8.6625 NaN S 0
4 896 3 Hirvonen, Mrs. Alexander (Helga E Lindqvist) female 22.0 1 1 3101298 12.2875 NaN S 2
... ... ... ... ... ... ... ... ... ... ... ... ...
413 1305 3 Spector, Mr. Woolf male NaN 0 0 A.5. 3236 8.0500 NaN S 0
414 1306 1 Oliva y Ocana, Dona. Fermina female 39.0 0 0 PC 17758 108.9000 C105 C 0
415 1307 3 Saether, Mr. Simon Sivertsen male 38.5 0 0 SOTON/O.Q. 3101262 7.2500 NaN S 0
416 1308 3 Ware, Mr. Frederick male NaN 0 0 359309 8.0500 NaN S 0
417 1309 3 Peter, Master. Michael J male NaN 1 1 2668 22.3583 NaN C 2

418 rows × 12 columns

B. Predictor 생성

- 비유: 문제를 풀 학생을 생성하는 과정으로 비유할 수 있다.

predictr = TabularPredictor("Survived")
No path specified. Models will be saved in: "AutogluonModels/ag-20230917_140239/"

C. 적합(fit)

- 비유: 학생이 공부를 하는 과정으로 비유할 수 있다.

- 학습

predictr.fit(tr.eval('Fsize = SibSp + Parch'))
Beginning AutoGluon training ...
AutoGluon will save models to "AutogluonModels/ag-20230917_140239/"
AutoGluon Version:  0.8.2
Python Version:     3.8.18
Operating System:   Linux
Platform Machine:   x86_64
Platform Version:   #26~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Thu Jul 13 16:27:29 UTC 2
Disk Space Avail:   775.56 GB / 982.82 GB (78.9%)
Train Data Rows:    891
Train Data Columns: 12
Label Column: Survived
Preprocessing data ...
AutoGluon infers your prediction problem is: 'binary' (because only two unique label-values observed).
    2 unique label values:  [0, 1]
    If 'binary' is not the correct problem_type, please manually specify the problem_type parameter during predictor init (You may specify problem_type as one of: ['binary', 'multiclass', 'regression'])
Selected class <--> label mapping:  class 1 = 1, class 0 = 0
Using Feature Generators to preprocess the data ...
Fitting AutoMLPipelineFeatureGenerator...
    Available Memory:                    39207.34 MB
    Train Data (Original)  Memory Usage: 0.32 MB (0.0% of available memory)
    Inferring data type of each feature based on column values. Set feature_metadata_in to manually specify special dtypes of the features.
    Stage 1 Generators:
        Fitting AsTypeFeatureGenerator...
            Note: Converting 1 features to boolean dtype as they only contain 2 unique values.
    Stage 2 Generators:
        Fitting FillNaFeatureGenerator...
    Stage 3 Generators:
        Fitting IdentityFeatureGenerator...
        Fitting CategoryFeatureGenerator...
            Fitting CategoryMemoryMinimizeFeatureGenerator...
        Fitting TextSpecialFeatureGenerator...
            Fitting BinnedFeatureGenerator...
            Fitting DropDuplicatesFeatureGenerator...
        Fitting TextNgramFeatureGenerator...
            Fitting CountVectorizer for text features: ['Name']
            CountVectorizer fit with vocabulary size = 8
    Stage 4 Generators:
        Fitting DropUniqueFeatureGenerator...
    Stage 5 Generators:
        Fitting DropDuplicatesFeatureGenerator...
    Types of features in original data (raw dtype, special dtypes):
        ('float', [])        : 2 | ['Age', 'Fare']
        ('int', [])          : 5 | ['PassengerId', 'Pclass', 'SibSp', 'Parch', 'Fsize']
        ('object', [])       : 4 | ['Sex', 'Ticket', 'Cabin', 'Embarked']
        ('object', ['text']) : 1 | ['Name']
    Types of features in processed data (raw dtype, special dtypes):
        ('category', [])                    : 3 | ['Ticket', 'Cabin', 'Embarked']
        ('float', [])                       : 2 | ['Age', 'Fare']
        ('int', [])                         : 5 | ['PassengerId', 'Pclass', 'SibSp', 'Parch', 'Fsize']
        ('int', ['binned', 'text_special']) : 9 | ['Name.char_count', 'Name.word_count', 'Name.capital_ratio', 'Name.lower_ratio', 'Name.special_ratio', ...]
        ('int', ['bool'])                   : 1 | ['Sex']
        ('int', ['text_ngram'])             : 9 | ['__nlp__.henry', '__nlp__.john', '__nlp__.master', '__nlp__.miss', '__nlp__.mr', ...]
    0.1s = Fit runtime
    12 features in original data used to generate 29 features in processed data.
    Train Data (Processed) Memory Usage: 0.08 MB (0.0% of available memory)
Data preprocessing and feature engineering runtime = 0.17s ...
AutoGluon will gauge predictive performance using evaluation metric: 'accuracy'
    To change this, specify the eval_metric parameter of Predictor()
Automatically generating train/validation split with holdout_frac=0.2, Train Rows: 712, Val Rows: 179
User-specified model hyperparameters to be fit:
{
    'NN_TORCH': {},
    'GBM': [{'extra_trees': True, 'ag_args': {'name_suffix': 'XT'}}, {}, 'GBMLarge'],
    'CAT': {},
    'XGB': {},
    'FASTAI': {},
    'RF': [{'criterion': 'gini', 'ag_args': {'name_suffix': 'Gini', 'problem_types': ['binary', 'multiclass']}}, {'criterion': 'entropy', 'ag_args': {'name_suffix': 'Entr', 'problem_types': ['binary', 'multiclass']}}, {'criterion': 'squared_error', 'ag_args': {'name_suffix': 'MSE', 'problem_types': ['regression', 'quantile']}}],
    'XT': [{'criterion': 'gini', 'ag_args': {'name_suffix': 'Gini', 'problem_types': ['binary', 'multiclass']}}, {'criterion': 'entropy', 'ag_args': {'name_suffix': 'Entr', 'problem_types': ['binary', 'multiclass']}}, {'criterion': 'squared_error', 'ag_args': {'name_suffix': 'MSE', 'problem_types': ['regression', 'quantile']}}],
    'KNN': [{'weights': 'uniform', 'ag_args': {'name_suffix': 'Unif'}}, {'weights': 'distance', 'ag_args': {'name_suffix': 'Dist'}}],
}
Fitting 13 L1 models ...
Fitting model: KNeighborsUnif ...
/home/coco/anaconda3/envs/py38/lib/python3.8/site-packages/torch/cuda/__init__.py:497: UserWarning: Can't initialize NVML
  warnings.warn("Can't initialize NVML")
Exception ignored on calling ctypes callback function: <function _ThreadpoolInfo._find_modules_with_dl_iterate_phdr.<locals>.match_module_callback at 0x7fd2d4238280>
Traceback (most recent call last):
  File "/home/coco/anaconda3/envs/py38/lib/python3.8/site-packages/threadpoolctl.py", line 400, in match_module_callback
    self._make_module_from_path(filepath)
  File "/home/coco/anaconda3/envs/py38/lib/python3.8/site-packages/threadpoolctl.py", line 515, in _make_module_from_path
    module = module_class(filepath, prefix, user_api, internal_api)
  File "/home/coco/anaconda3/envs/py38/lib/python3.8/site-packages/threadpoolctl.py", line 606, in __init__
    self.version = self.get_version()
  File "/home/coco/anaconda3/envs/py38/lib/python3.8/site-packages/threadpoolctl.py", line 646, in get_version
    config = get_config().split()
AttributeError: 'NoneType' object has no attribute 'split'
    0.648    = Validation score   (accuracy)
    0.55s    = Training   runtime
    0.03s    = Validation runtime
Fitting model: KNeighborsDist ...
Exception ignored on calling ctypes callback function: <function _ThreadpoolInfo._find_modules_with_dl_iterate_phdr.<locals>.match_module_callback at 0x7fd2d14bbc10>
Traceback (most recent call last):
  File "/home/coco/anaconda3/envs/py38/lib/python3.8/site-packages/threadpoolctl.py", line 400, in match_module_callback
    self._make_module_from_path(filepath)
  File "/home/coco/anaconda3/envs/py38/lib/python3.8/site-packages/threadpoolctl.py", line 515, in _make_module_from_path
    module = module_class(filepath, prefix, user_api, internal_api)
  File "/home/coco/anaconda3/envs/py38/lib/python3.8/site-packages/threadpoolctl.py", line 606, in __init__
    self.version = self.get_version()
  File "/home/coco/anaconda3/envs/py38/lib/python3.8/site-packages/threadpoolctl.py", line 646, in get_version
    config = get_config().split()
AttributeError: 'NoneType' object has no attribute 'split'
    0.648    = Validation score   (accuracy)
    0.02s    = Training   runtime
    0.01s    = Validation runtime
Fitting model: LightGBMXT ...
    0.8156   = Validation score   (accuracy)
    0.2s     = Training   runtime
    0.0s     = Validation runtime
Fitting model: LightGBM ...
    0.8212   = Validation score   (accuracy)
    0.19s    = Training   runtime
    0.0s     = Validation runtime
Fitting model: RandomForestGini ...
    0.8156   = Validation score   (accuracy)
    0.29s    = Training   runtime
    0.02s    = Validation runtime
Fitting model: RandomForestEntr ...
    0.8212   = Validation score   (accuracy)
    0.27s    = Training   runtime
    0.02s    = Validation runtime
Fitting model: CatBoost ...
    0.8268   = Validation score   (accuracy)
    0.42s    = Training   runtime
    0.0s     = Validation runtime
Fitting model: ExtraTreesGini ...
    0.8045   = Validation score   (accuracy)
    0.27s    = Training   runtime
    0.02s    = Validation runtime
Fitting model: ExtraTreesEntr ...
    0.8101   = Validation score   (accuracy)
    0.27s    = Training   runtime
    0.02s    = Validation runtime
Fitting model: NeuralNetFastAI ...
    0.8324   = Validation score   (accuracy)
    0.63s    = Training   runtime
    0.01s    = Validation runtime
Fitting model: XGBoost ...
    0.8268   = Validation score   (accuracy)
    0.2s     = Training   runtime
    0.0s     = Validation runtime
Fitting model: NeuralNetTorch ...
    0.8324   = Validation score   (accuracy)
    1.38s    = Training   runtime
    0.01s    = Validation runtime
Fitting model: LightGBMLarge ...
    0.8324   = Validation score   (accuracy)
    0.36s    = Training   runtime
    0.0s     = Validation runtime
Fitting model: WeightedEnsemble_L2 ...
    0.8547   = Validation score   (accuracy)
    0.33s    = Training   runtime
    0.0s     = Validation runtime
AutoGluon training complete, total runtime = 5.82s ... Best model: "WeightedEnsemble_L2"
TabularPredictor saved. To load, use: predictor = TabularPredictor.load("AutogluonModels/ag-20230917_140239/")
<autogluon.tabular.predictor.predictor.TabularPredictor at 0x7fd2a6761d00>

- 리더보드확인 (모의고사채점)

predictr.leaderboard()
                  model  score_val  pred_time_val  fit_time  pred_time_val_marginal  fit_time_marginal  stack_level  can_infer  fit_order
0   WeightedEnsemble_L2   0.854749       0.047879  2.622710                0.000539           0.327875            2       True         14
1         LightGBMLarge   0.832402       0.002897  0.362443                0.002897           0.362443            1       True         13
2       NeuralNetFastAI   0.832402       0.007049  0.626138                0.007049           0.626138            1       True         10
3        NeuralNetTorch   0.832402       0.008281  1.377705                0.008281           1.377705            1       True         12
4              CatBoost   0.826816       0.003585  0.415325                0.003585           0.415325            1       True          7
5               XGBoost   0.826816       0.004826  0.200229                0.004826           0.200229            1       True         11
6              LightGBM   0.821229       0.002808  0.190213                0.002808           0.190213            1       True          4
7      RandomForestEntr   0.821229       0.023621  0.274035                0.023621           0.274035            1       True          6
8            LightGBMXT   0.815642       0.002782  0.195089                0.002782           0.195089            1       True          3
9      RandomForestGini   0.815642       0.024148  0.285713                0.024148           0.285713            1       True          5
10       ExtraTreesEntr   0.810056       0.024155  0.271298                0.024155           0.271298            1       True          9
11       ExtraTreesGini   0.804469       0.024840  0.271464                0.024840           0.271464            1       True          8
12       KNeighborsDist   0.648045       0.008390  0.016957                0.008390           0.016957            1       True          2
13       KNeighborsUnif   0.648045       0.030974  0.549377                0.030974           0.549377            1       True          1
model score_val pred_time_val fit_time pred_time_val_marginal fit_time_marginal stack_level can_infer fit_order
0 WeightedEnsemble_L2 0.854749 0.047879 2.622710 0.000539 0.327875 2 True 14
1 LightGBMLarge 0.832402 0.002897 0.362443 0.002897 0.362443 1 True 13
2 NeuralNetFastAI 0.832402 0.007049 0.626138 0.007049 0.626138 1 True 10
3 NeuralNetTorch 0.832402 0.008281 1.377705 0.008281 1.377705 1 True 12
4 CatBoost 0.826816 0.003585 0.415325 0.003585 0.415325 1 True 7
5 XGBoost 0.826816 0.004826 0.200229 0.004826 0.200229 1 True 11
6 LightGBM 0.821229 0.002808 0.190213 0.002808 0.190213 1 True 4
7 RandomForestEntr 0.821229 0.023621 0.274035 0.023621 0.274035 1 True 6
8 LightGBMXT 0.815642 0.002782 0.195089 0.002782 0.195089 1 True 3
9 RandomForestGini 0.815642 0.024148 0.285713 0.024148 0.285713 1 True 5
10 ExtraTreesEntr 0.810056 0.024155 0.271298 0.024155 0.271298 1 True 9
11 ExtraTreesGini 0.804469 0.024840 0.271464 0.024840 0.271464 1 True 8
12 KNeighborsDist 0.648045 0.008390 0.016957 0.008390 0.016957 1 True 2
13 KNeighborsUnif 0.648045 0.030974 0.549377 0.030974 0.549377 1 True 1

D. 예측 (predict)

- 비유: 학습이후에 문제를 푸는 과정으로 비유할 수 있다.

- training set 을 풀어봄 (predict) \(\to\) 점수 확인

(tr.Survived == predictr.predict(tr.eval('Fsize = SibSp + Parch'))).mean()
Exception ignored on calling ctypes callback function: <function _ThreadpoolInfo._find_modules_with_dl_iterate_phdr.<locals>.match_module_callback at 0x7fd215321c10>
Traceback (most recent call last):
  File "/home/coco/anaconda3/envs/py38/lib/python3.8/site-packages/threadpoolctl.py", line 400, in match_module_callback
    self._make_module_from_path(filepath)
  File "/home/coco/anaconda3/envs/py38/lib/python3.8/site-packages/threadpoolctl.py", line 515, in _make_module_from_path
    module = module_class(filepath, prefix, user_api, internal_api)
  File "/home/coco/anaconda3/envs/py38/lib/python3.8/site-packages/threadpoolctl.py", line 606, in __init__
    self.version = self.get_version()
  File "/home/coco/anaconda3/envs/py38/lib/python3.8/site-packages/threadpoolctl.py", line 646, in get_version
    config = get_config().split()
AttributeError: 'NoneType' object has no attribute 'split'
0.9438832772166106

- test set 을 풀어봄 (predict) \(\to\) 점수 확인 하러 캐글에 결과제출

tst.assign(Survived = predictr.predict(tst.eval('Fsize = SibSp + Parch'))).loc[:,['PassengerId','Survived']]\
.to_csv("autogluon(Fsize)_submission.csv",index=False)